package LeetCode;

import java.util.HashMap;
import java.util.Map;

/**
 * @author attcat
 * ---做一个有趣的程序员
 * @date 2022-09-30 22:30
 * @description  给定一个整数数组 nums 和一个整数目标值 target 请你在该数组中找出和为目标值 target的那2个整数并返回他们的数组下标
 *
 * nums=【2，7，11，15】，target =9
 * 输出【0，1】
 * 因为nums【0】+nums[1]==9  返回【0，1】
 *
 */
public class LeetCode_1 {


    /****
     * 暴力穷举  每个和后一个进行计算。
     * 2个for 循环   O(N^2)
     */
    public int[] twoSum(int[] nums,int target){
        int[] result=new int[2];
        for(int i=0;i<nums.length;i++){
            for(int j=i+1;j<nums.length;j++){
                if(nums[i]+nums[j]==target){
                    result[0]=i;
                    result[1]=j;
                    return result;
                }
            }
        }
        return result;
    }



    public int[] twoSumAddmap(int[] nums,int target){
        /*key 为元素值，value 为每个元素对应的下标*/
         Map<Integer,Integer> storeMap=new HashMap<>();
         int[] result=new int[2];
         for(int i=0;i<nums.length;i++){
             int another=target-nums[i];
             Integer anotherIndex=storeMap.get(another);
             if(null!=anotherIndex){
                 result[0]=anotherIndex;
                 result[1]=i;
                 break;
             }
             else {
                 storeMap.put(nums[i],i);
             }
         }
        return result;
    }

    /****
     * 用map 进行存储
     * @param args
     */


    public static void main(String[] args) {
        LeetCode_1 leetcode_01=new LeetCode_1();
        int target=13;
        int[]   nums={2,7,11,15,13};
        int[] result= leetcode_01.twoSumAddmap(nums,target);

         System.out.println(result[0]);
        System.out.println(result[1]);


    }
}
